<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    //es6对object 的完善更改 
    //1 对象属性变量式 声明 
    //(es6可以直接以变量的形式 声明对象的属性或方法 比传统的键值对形式声明更加简单 方便 清晰)
    let [name,address] = ["yd","beijing"];
    let info = {name,address}
    console.log(info)   //address: "beijing" name: "yd"

    //方法也可以采用简洁化  
    //es5 
    let obj = {
        fn:funciton(){}
    }
    //es6
    let obj = {
        fu(){}
    }


    //2 对象的解构赋值  
    //es6 对象也可以像数组解构赋值那样 进行变量的解构赋值  
    let {name,address} = {name:"yd",address:"beijing"}
    console.log(name,address)  //yd beijing 

    
    //3 对象的拓展运算符 
    //es6 对象的拓展运算符 和数组的本质上一样 毕竟数组也是特殊的对象 
    //优点即 轻松取出来 一个目标对象内部 全部或者部分的可便利属性  进而对对象的合并与分解 
    let {name,...info} = {name:"yd",address:"beijing",age:"9"}
    console.log(name); //yd
    console.log(info)  //{address:"neijing" age:"6"}
    //! ...拓展运算符 只可以放在最后位  


    //es6 Objet 原型上增加了 is()方法 
    //用来做两个目标对象的相等比较 用来完善 === 方法 
    //在 === 方法中 NaN === NaN //false 其实是不合理的  Object.is 修复了这个问题 BUg  Object.is(NaN,NaN //true)


    //es6 在Object原型上 新增了 assign() 方法 
    //用于对象新增属性 或多个对象合并 
    const target = {name:"yd"};
    const obj1 = {address:"beijing"}
    const obj2 = {age:3}
    Object.assign(target,boj1,obj2);
    console.log(name:"yd",address:"beijing",age:3)
    //! assign 合并对象target只能合并obj,obj2中的自身属性 不会合并继承属性 和 不可枚举属性 且无法复制get和set属性(会直接执行get/set函数 取return值)
    
    

    //变量赋值 
    //准许把 声明的变量直接赋值给对象 
    let name = "常东东";
    let skill = "收购腾讯";
    var obj = {
        name,skill
    };
    console.log(obj);
    //obj {name:"常东东",skill:"收购腾讯"}
    
     

    
















</script>